home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / 051-060 / amok56 / m2maker / txt / installoptions.mod < prev    next >
Text File  |  1993-11-04  |  8KB  |  255 lines

  1. (*---------------------------------------------------------------------------
  2.   :Program.    m2Maker
  3.   :Author.     Thomas Stolze
  4.   :Address.    Goslarsche Str. 32, 3000 Hannover 21, Germany
  5.   :Phone.      (0)511 / 75 10 77
  6.   :Version.    V2.0
  7.   :Date.       10-Nov-90
  8.   :Copyright.  Shareware
  9.   :Language.   Modula-2
  10.   :Translator. M2Amiga V3.32d
  11.   :Contents.   Programming Utility.
  12.   :Remark.     Supports the M2Amiga System (C) by A+L AG Switzerland
  13. ---------------------------------------------------------------------------*)
  14.  
  15. IMPLEMENTATION MODULE InstallOptions;
  16.  
  17. IMPORT ExecD;
  18. IMPORT IntuitionL;
  19. IMPORT FileSystem;
  20.  
  21. FROM Arts            IMPORT Assert,BreakPoint;
  22. FROM ASCII           IMPORT lf,ff,cr;
  23. FROM Conversions     IMPORT ValToStr;
  24. FROM DosD            IMPORT accessRead,FileLockPtr;
  25. FROM DosL            IMPORT CurrentDir,Delay,DeleteFile,Execute,
  26.                             Input,IoErr,Lock,Output,Rename,UnLock;
  27. FROM ExecD           IMPORT IOStdReqPtr,Message,MsgPortPtr;
  28. FROM ExecL           IMPORT CloseDevice,CopyMem,DoIO,FindPort,GetMsg,
  29.                             OpenDevice,PutMsg,ReplyMsg,WaitPort,Forbid,Permit,
  30.                             FindResident;
  31. FROM ExecSupport     IMPORT CreatePort,CreateStdIO,DeletePort,DeleteStdIO;
  32. FROM FileRequester   IMPORT LoadDir,RefreshDisplay;
  33. FROM FileSystem      IMPORT Close,Delete,File,Lookup,ReadChar,Response,
  34.                             WriteBytes,WriteChar;
  35. FROM GraphicsD       IMPORT jam2,RastPortPtr;
  36. FROM GraphicsL       IMPORT RectFill,SetAPen,SetDrMd;
  37. FROM Input           IMPORT inputName,writeEvent;
  38. FROM InputEvent      IMPORT InputEvent,Class,Qualifiers,QualifierSet;
  39. FROM InitIntuition   IMPORT prgPtr,PrintStatus,RefreshDrawings,
  40.                             windowHeight;
  41. FROM IntuitionD      IMPORT GadgetFlags,GadgetFlagSet,
  42.                             IntuitionBasePtr,MenuItemFlags,
  43.                             MenuItemFlagSet,ScreenPtr,WindowPtr;
  44. FROM IntuitionL      IMPORT ActivateGadget,ActivateWindow,AddGadget,
  45.                             BeginRefresh,
  46.                             ClearMenuStrip,EndRefresh,
  47.                             LockIBase,
  48.                             MoveWindow,OffMenu,OnMenu,
  49.                             RefreshGadgets,RefreshGList,RemoveGadget,
  50.                             ScreenToFront,SetMenuStrip,SizeWindow,UnlockIBase,
  51.                             WBenchToFront,WindowToFront,
  52.                             AddGList,RemoveGList;
  53. FROM Routines        IMPORT SendCommand,ExecuteStr,ByeByeCompiler,
  54.                 ByeByeDebug,ExclChecked,ByeByePool,ByeByeM2Ohm,
  55.                 InteractiveCompiler,MakePath;
  56. FROM String          IMPORT Compare,Concat,Copy,LastPos,Length,FirstPos;
  57. FROM SYSTEM          IMPORT ADDRESS,ADR,CAST,LONGSET,BYTE;
  58. FROM TaskMemory      IMPORT Allocate,Deallocate;
  59.  
  60. FROM InOut IMPORT WriteString,WriteInt,WriteLn;
  61.  
  62. TYPE ResidentTool    = (m2c,m2l,m2emacs);
  63.      ResidentToolSet = SET OF ResidentTool;
  64.  
  65. VAR residentTool : ResidentToolSet;
  66.  
  67. PROCEDURE FilterResidentElement(in : ARRAY OF CHAR; VAR out : ARRAY OF CHAR);
  68. VAR i,j   : CARDINAL;
  69.     loop,
  70.     first : BOOLEAN;
  71. BEGIN
  72.   i:=0; j:=0; loop:=TRUE; first:=FALSE;
  73.   WHILE (in[i] # 00C) AND loop DO
  74.     CASE in[i] OF
  75.      " " : CASE first OF
  76.               TRUE: loop := FALSE;
  77.            | FALSE: WHILE in[i] = " " DO INC(i) END;
  78.            END;
  79.     ELSE
  80.       out[j]:=in[i]; INC(i); INC(j); first:=TRUE;
  81.     END;
  82.   END;
  83. END FilterResidentElement;
  84.  
  85. PROCEDURE MakeResident(str : ARRAY OF CHAR; add : BOOLEAN);
  86. VAR dum : ARRAY [0..150] OF CHAR;
  87. BEGIN
  88.   IF add THEN
  89.      dum:=("Resident "); Concat(dum,str); Concat(dum," ADD");
  90.      ExecuteStr(ADR(dum));
  91.   ELSE
  92.      dum:=("Resident "); Concat(dum,str); Concat(dum," REMOVE");
  93.      ExecuteStr(ADR(dum));
  94.   END;
  95. END MakeResident;
  96.  
  97. PROCEDURE ResidentEditor;
  98. VAR dum : ARRAY [0..150] OF CHAR;
  99. BEGIN
  100.   IF (checked IN prgPtr^.MenuArray[27].flags) THEN
  101.      PrintStatus("Editor resident !");
  102.      IF NOT (m2emacs IN residentTool) THEN
  103.         FilterResidentElement(prgPtr^.BufferString[4],dum);
  104.         MakeResident(dum,TRUE);
  105.         INCL(residentTool,m2emacs);
  106.      END;
  107.   ELSE
  108.      FilterResidentElement(prgPtr^.BufferString[4],dum);
  109.      MakeResident(dum,FALSE);
  110.      EXCL(residentTool,m2emacs);
  111.      ExclChecked(27);
  112.   END;
  113. END ResidentEditor;
  114.  
  115. PROCEDURE ResidentCompiler;
  116. VAR dum : ARRAY [0..150] OF CHAR;
  117. BEGIN
  118.   IF (checked IN prgPtr^.MenuArray[25].flags) THEN
  119.      PrintStatus("Compiler resident !");
  120.      IF NOT (m2c IN residentTool) THEN
  121.         FilterResidentElement(prgPtr^.BufferString[5],dum);
  122.         MakeResident(dum,TRUE);
  123.         INCL(residentTool,m2c);
  124.      END;
  125.   ELSE
  126.      FilterResidentElement(prgPtr^.BufferString[5],dum);
  127.      MakeResident(dum,FALSE);
  128.      EXCL(residentTool,m2c);
  129.      ExclChecked(25);
  130.   END;
  131. END ResidentCompiler;
  132.  
  133. PROCEDURE ResidentLinker;
  134. VAR dum : ARRAY [0..150] OF CHAR;
  135. BEGIN
  136.   IF (checked IN prgPtr^.MenuArray[26].flags) THEN
  137.      PrintStatus("Linker resident !");
  138.      IF NOT (m2l IN residentTool) THEN
  139.         FilterResidentElement(prgPtr^.BufferString[6],dum);
  140.         MakeResident(dum,TRUE);
  141.         INCL(residentTool,m2l)
  142.      END;
  143.   ELSE
  144.      FilterResidentElement(prgPtr^.BufferString[6],dum);
  145.      MakeResident(dum,FALSE);
  146.      EXCL(residentTool,m2l);
  147.      ExclChecked(26);
  148.   END;
  149. END ResidentLinker;
  150.  
  151. PROCEDURE InstallDebug;
  152. VAR actual : LONGINT;
  153.     dummy  : ARRAY [0..150] OF CHAR;
  154.     file   : File;
  155. BEGIN
  156.   IF (checked IN prgPtr^.MenuArray[29].flags) THEN
  157.      PrintStatus("Start Debugger !");
  158.      Lookup(file,"T:m2Maker.m2d",1024,TRUE);
  159.      IF file.res = done THEN
  160.  
  161.         WriteBytes(file,ADR(prgPtr^.BufferString[8]),
  162.             Length(prgPtr^.BufferString[8]),actual);
  163.         WriteBytes(file,ADR(" > NIL:"),7,actual);         WriteChar(file,lf);
  164.         WriteBytes(file,ADR("EndCli >NIL:"),12,actual);   WriteChar(file,lf);
  165.         Close(file);
  166.         dummy:='Newshell "NEWCON:0/0/320/24/Interactive Debugger m2:m2d"'+
  167.                ' FROM T:m2Maker.m2d';
  168.         ExecuteStr(ADR(dummy));
  169.         WindowToFront(prgPtr^.window); Delay(2);
  170.      ELSE
  171.         PrintStatus("Debug installation failed !");
  172.      END;
  173.   ELSE
  174.     ByeByeDebug;
  175.   END;
  176. END InstallDebug;
  177.  
  178. PROCEDURE InstallPool;
  179. VAR actual : LONGINT;
  180.     dummy  : ARRAY [0..150] OF CHAR;
  181.     file   : File;
  182.  
  183.   PROCEDURE FeedPool;
  184.   VAR setenvPtr  : POINTER TO ARRAY [0..255] OF CHAR;
  185.       ffile      : File;
  186.       i          : CARDINAL;
  187.   BEGIN
  188.     Allocate(setenvPtr,256);
  189.     IF setenvPtr # NIL THEN
  190.        MakePath(prgPtr^.BufferString[3],"m2Maker.poo",dummy);
  191.        Lookup(ffile,dummy,1024,FALSE);
  192.        IF file.res = done THEN
  193.           setenvPtr^:='Setenv M2POOL "'; i:=Length(setenvPtr^);
  194.           REPEAT
  195.             ReadChar(ffile,setenvPtr^[i]);
  196.             CASE setenvPtr^[i] OF
  197.             | lf: setenvPtr^[i]:=(" ");
  198.             ELSE
  199.             END;
  200.             INC(i);
  201.           UNTIL ((ffile.eof) OR (i >= 256));
  202.        END;
  203.        Close(ffile);
  204.        setenvPtr^[i-3]:='"'; setenvPtr^[i-2]:=00C;
  205.          WriteBytes(file,setenvPtr,Length(setenvPtr^),actual);
  206.        Deallocate(setenvPtr);
  207.     END;
  208.   END FeedPool;
  209. BEGIN
  210.   IF (checked IN prgPtr^.MenuArray[28].flags) THEN
  211.      PrintStatus("Start Pool !");
  212.  
  213.      IF FindPort(ADR("M2POOL")) = NIL THEN
  214.         Lookup(file,"T:m2Maker.m2p",1024,TRUE);
  215.         IF file.res = done THEN
  216.            FeedPool;                                         WriteChar(file,lf);
  217.            WriteBytes(file,ADR(prgPtr^.BufferString[10]),
  218.                Length(prgPtr^.BufferString[10]),actual);     WriteChar(file,lf);
  219.            WriteBytes(file,ADR("EndCli >NIL:"),12,actual);   WriteChar(file,lf);
  220.            Close(file);
  221.            dummy:='Newshell "NEWCON:0/0/320/24/Interactive Pool m2:m2Pool"'+
  222.                   ' FROM T:m2Maker.m2p';
  223.            ExecuteStr(ADR(dummy));
  224.            WindowToFront(prgPtr^.window); Delay(2);
  225.            PrintStatus("Pool installed.");
  226.         ELSE
  227.            PrintStatus("Pool installation failed !");
  228.         END;
  229.      END;
  230.   ELSE
  231.     ByeByePool;
  232.   END;
  233. END InstallPool;
  234.  
  235. PROCEDURE InstallM2Ohm;
  236. BEGIN
  237.   IF (checked IN prgPtr^.MenuArray[30].flags) THEN
  238.       PrintStatus("Start M2Ohm !");
  239.       IF FindPort(ADR("OHM")) = NIL THEN
  240.          ExecuteStr(ADR(prgPtr^.BufferString[16]));
  241.       END;
  242.   ELSE
  243.       ExclChecked(30);
  244.       ByeByeM2Ohm;
  245.   END;
  246. END InstallM2Ohm;
  247.  
  248. BEGIN
  249.  
  250. CLOSE
  251.    ExclChecked(25);  ResidentCompiler;
  252.    ExclChecked(26);  ResidentLinker;
  253.    ExclChecked(27);  ResidentEditor;
  254. END InstallOptions.
  255.